package Com.aop.advice;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.*;
import org.junit.runner.RunWith;

/***
 *
 * 自定义通知/增强类
 * 也就是代理对象为目标对象准备的增强方法
 *@Aspect首先说明 这是个通知对象
 *
 */
@Aspect
public class myAdvice {
    public  void myAdvice(){
        System.out.println("sdds");
    }
    /**
     * 通知/增强的形式
     * 1.前置通知
     * 2.后置通知-抛异常不执行
     * 3.环绕通知 前后执行
     * 4.异常通知 抛异常才执行
     * 5.后置通知 无论是否抛异常都执行
     * */
    @Pointcut("execution(* Com.aop.dao.*Serviceimpl.save(..))")
    public void pc(){

    }
    @Before("myAdvice.pc()")
    public void before(){
        System.out.println("前置通知");
    }
 @AfterReturning("myAdvice.pc()")
    public void after_Runing(){
        System.out.println("后置通知");
    }
    @Around("execution(* Com.aop.dao.*Serviceimpl.delete(..))")
    public Object around(ProceedingJoinPoint point) throws Throwable {
        System.out.println("这是环绕前的方法");
        Object object=   point.proceed();
        System.out.println("这是环绕后的方法");
        return object;
    }

    public  void after_exception(){
        System.out.println("异常通知");
    }
    public void after(){
        System.out.println("无论如何都会执行");
    }





}


